/**
 * XSAN SPDK兼容性函数
 */
#ifndef XSAN_SPDK_COMPAT_H
#define XSAN_SPDK_COMPAT_H

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <sys/uio.h> // for struct iovec

#ifdef __cplusplus
extern "C" {
#endif

/* 前向声明 */
struct spdk_bdev;
struct spdk_bdev_module;
struct spdk_nvmf_subsystem;
struct spdk_nvmf_ns_opts;

/**
 * SPDK错误描述字符串
 */
const char *spdk_strerror(int err);

/**
 * 检查SPDK块设备是否为旋转设备
 */
bool spdk_bdev_is_rotational(struct spdk_bdev *bdev);

/**
 * 注册SPDK块设备模块
 */
int spdk_bdev_module_register(struct spdk_bdev_module *module);

/**
 * 从IOV复制数据到缓冲区
 */
size_t spdk_iov_memcpy_to_iov(struct iovec *iovs, int iovcnt, 
                              const void *src, size_t len);

/**
 * 从缓冲区复制数据到IOV
 */
size_t spdk_iov_memcpy_from_iov(void *dst, size_t len,
                                struct iovec *iovs, int iovcnt);

/* SPDK NVMe-oF 相关函数声明 */
uint32_t spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem,
                                   struct spdk_bdev *bdev,
                                   const struct spdk_nvmf_ns_opts *opts);

/* SPDK状态常量 */
#define SPDK_BDEV_IO_STATUS_NOT_SUPPORTED 1

#ifdef __cplusplus
}
#endif

#endif /* XSAN_SPDK_COMPAT_H */ 